home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-04-23 | 4.0 KB | 167 lines | [TEXT/PJMM] |
- { Preferences.p --> functions related to maintaining a }
- { preference file }
- unit Preferences;
- interface
- uses
- Globals;
- { function prototypes }
- procedure DoPrefDefault (var myPrefs: PrefRecord);
- procedure GetPreferences (var myPrefs: PrefRecord);
- procedure SaveMyPrefs (myPrefs: PrefRecord);
- procedure ValidatePrefs (var myPrefs: PrefRecord);
- implementation
- uses
- Folders, MySpeech, Utility;
- const
- VERSION = 2;
- PREF_NAME_ID = 414;
- CREATOR = 'Slik';
- DEFAULT_BITE_FREQ = 800;
-
- procedure DoPrefDefault (var myPrefs: PrefRecord);
- var
- iErr: OSErr;
- begin
- with myPrefs do
- begin
- version := VERSION;
- zoomed := TRUE;
- chimed := FALSE;
- sayDays := FALSE;
- sayHours := FALSE;
- sayBites := FALSE;
- useSysVoice := TRUE;
- pitch := X2Fix(50.0);
- wpm := X2Fix(160.0);
- modulation := X2Fix(50.0);
- volume := X2Fix(0.50);
- keepVoice := TRUE;
- useDaemon := TRUE;
- if IsSpeechAvailable then
- begin
- iErr := MakeVoiceSpec('mtk2', '1 ', @voice);
- end;
- unused2 := 0;
- unused3 := 1;
- biteFreq := DEFAULT_BITE_FREQ;
- end;
- end;
- { the original watch didn't have these values, we would crash if }
- { they were equal to zero }
-
- procedure ValidatePrefs (var myPrefs: PrefRecord);
- var
- ok: Boolean;
- pitchVal, wpmVal, volVal, modVal: extended;
- begin
- ok := TRUE;
- with myPrefs do
- begin
- if version < VERSION then
- version := version;
- pitchVal := Fix2X(pitch);
- if FALSE = CompareMyValues(pitchVal, MAX_PITCH, MIN_PITCH, ok) then
- pitch := X2Fix(50.0);
-
- wpmVal := Fix2X(wpm);
- if False = CompareMyValues(wpmVal, MAX_WPM, MIN_WPM, ok) then
- wpm := X2Fix(160.0);
-
- volVal := Fix2X(volume);
- if False = CompareMyValues(volVal, MAX_VOL, MIN_VOL, ok) then
- volume := X2Fix(0.5);
-
- modVal := Fix2X(volume);
- if False = CompareMyValues(modVal, MAX_MOD, MIN_MOD, ok) then
- volume := X2Fix(0.5);
- if (biteFreq > 16667) or (biteFreq < 0) then
- biteFreq := DEFAULT_BITE_FREQ;
- end;
- end;
-
- function GetPrefNameAndFolder (var prefNameH: StringHandle;
- var vRefNum: integer;
- var parID: LONGINT): OSErr;
- var
- iErr: OSErr;
- begin
- prefNameH := GetString(PREF_NAME_ID);
- iErr := FindFolder(kOnSystemDisk, kPreferencesFolderType, kCreateFolder, vRefNum, parID);
- if (prefNameH = nil) or (prefNameH^^ = '') then
- begin
- GetPrefNameAndFolder := bdNamErr;
- end
- else
- begin
- GetPrefNameAndFolder := iErr;
- end;
- end;
-
- function GetPrefRefNum (var vRefNum: integer): OSErr;
- var
- iErr: OSErr;
- folderRefNum: integer;
- parID: LONGINT;
- prefNameH: StringHandle;
- begin
- iErr := GetPrefNameAndFolder(prefNameH, folderRefNum, parID);
- if iErr = 0 then
- begin
- iErr := HOpen(folderRefNum, parID, prefNameH^^, 2, vRefNum);
- end;
- GetPrefRefNum := iErr;
- end;
-
- procedure SaveMyPrefs (myPrefs: PrefRecord);
- var
- iErr: OSErr;
- vRefNum, folderRefNum: integer;
- inOutCount, parID: LONGINT;
- bufPtr: Ptr;
- prefNameH: StringHandle;
- begin
- iErr := GetPrefRefNum(vRefNum);
- if iErr = fnfErr then
- begin
- iErr := GetPrefNameAndFolder(prefNameH, folderRefNum, parID);
- if iErr = 0 then
- begin
- iErr := HCreate(folderRefNum, parID, prefNameH^^, CREATOR, 'Pref');
- if iErr = 0 then
- begin
- iErr := HOpen(folderRefNum, parID, prefNameH^^, 2, vRefNum);
- end;
- end;
- end;
- if iErr = 0 then
- begin
- inOutCount := SIZEOF(PrefRecord);
- bufPtr := Ptr(@myPrefs);
- iErr := FSWrite(vRefNum, inOutCount, bufPtr);
- iErr := FSClose(vRefNum);
- end;
- end;
-
- procedure GetPreferences (var myPrefs: PrefRecord);
- var
- iErr: OSErr;
- vRefNum: integer;
- inOutCount: LONGINT;
- bufPtr: Ptr;
- prefNameH: StringHandle;
- begin
- iErr := GetPrefRefNum(vRefNum);
- if iErr = 0 then
- begin
- inOutCount := SIZEOF(PrefRecord);
- bufPtr := Ptr(@myPrefs);
- iErr := FSRead(vRefNum, inOutCount, bufPtr);
- iErr := FSClose(vRefNum);
- end
- else if iErr = fnfErr then
- begin
- SaveMyPrefs(myPrefs);
- end;
- end;
-
- end.